{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "bed2c9ae",
   "metadata": {},
   "source": [
    "# 本周内容：Web应用"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d926ab1c",
   "metadata": {},
   "source": [
    "## 使用Flask搭建Web最小应用"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83c918d1",
   "metadata": {},
   "source": [
    "> 1.使用select创建一个html页面：index.html  \n",
    "> 2.使用Flask中的render_template实现页面的路径转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1ba777dc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " * Serving Flask app \"__main__\" (lazy loading)\n",
      " * Environment: production\n",
      "\u001b[31m   WARNING: This is a development server. Do not use it in a production deployment.\u001b[0m\n",
      "\u001b[2m   Use a production WSGI server instead.\u001b[0m\n",
      " * Debug mode: off\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n",
      "127.0.0.1 - - [15/Nov/2023 20:16:26] \"GET / HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [15/Nov/2023 20:16:32] \"POST /user_choose HTTP/1.1\" 404 -\n"
     ]
    }
   ],
   "source": [
    "from flask import Flask\n",
    "from flask import render_template\n",
    "\n",
    "app = Flask(__name__)\n",
    "\n",
    "@app.route('/')\n",
    "def hello_world():\n",
    "    return render_template('index.html')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    app.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b71c3b2f",
   "metadata": {},
   "source": [
    "# 提交表单的内容在python中接收"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e093fafd",
   "metadata": {},
   "source": [
    "## html展示抓取数据的table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "61bc57ca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: requests-html in d:\\anaconda\\lib\\site-packages (0.10.0)\n",
      "Requirement already satisfied: w3lib in d:\\anaconda\\lib\\site-packages (from requests-html) (1.21.0)\n",
      "Requirement already satisfied: requests in d:\\anaconda\\lib\\site-packages (from requests-html) (2.27.1)\n",
      "Requirement already satisfied: fake-useragent in d:\\anaconda\\lib\\site-packages (from requests-html) (1.2.1)\n",
      "Requirement already satisfied: parse in d:\\anaconda\\lib\\site-packages (from requests-html) (1.19.1)\n",
      "Requirement already satisfied: bs4 in d:\\anaconda\\lib\\site-packages (from requests-html) (0.0.1)\n",
      "Requirement already satisfied: pyppeteer>=0.0.14 in d:\\anaconda\\lib\\site-packages (from requests-html) (1.0.2)\n",
      "Requirement already satisfied: pyquery in d:\\anaconda\\lib\\site-packages (from requests-html) (2.0.0)\n",
      "Requirement already satisfied: importlib-metadata>=1.4 in d:\\anaconda\\lib\\site-packages (from pyppeteer>=0.0.14->requests-html) (4.11.3)\n",
      "Requirement already satisfied: appdirs<2.0.0,>=1.4.3 in d:\\anaconda\\lib\\site-packages (from pyppeteer>=0.0.14->requests-html) (1.4.4)\n",
      "Requirement already satisfied: websockets<11.0,>=10.0 in d:\\anaconda\\lib\\site-packages (from pyppeteer>=0.0.14->requests-html) (10.4)\n",
      "Requirement already satisfied: urllib3<2.0.0,>=1.25.8 in d:\\anaconda\\lib\\site-packages (from pyppeteer>=0.0.14->requests-html) (1.26.9)\n",
      "Requirement already satisfied: pyee<9.0.0,>=8.1.0 in d:\\anaconda\\lib\\site-packages (from pyppeteer>=0.0.14->requests-html) (8.2.2)\n",
      "Requirement already satisfied: certifi>=2021 in d:\\anaconda\\lib\\site-packages (from pyppeteer>=0.0.14->requests-html) (2021.10.8)\n",
      "Requirement already satisfied: tqdm<5.0.0,>=4.42.1 in d:\\anaconda\\lib\\site-packages (from pyppeteer>=0.0.14->requests-html) (4.64.0)\n",
      "Requirement already satisfied: zipp>=0.5 in d:\\anaconda\\lib\\site-packages (from importlib-metadata>=1.4->pyppeteer>=0.0.14->requests-html) (3.7.0)\n",
      "Requirement already satisfied: colorama in d:\\anaconda\\lib\\site-packages (from tqdm<5.0.0,>=4.42.1->pyppeteer>=0.0.14->requests-html) (0.4.4)\n",
      "Requirement already satisfied: beautifulsoup4 in d:\\anaconda\\lib\\site-packages (from bs4->requests-html) (4.11.1)\n",
      "Requirement already satisfied: soupsieve>1.2 in d:\\anaconda\\lib\\site-packages (from beautifulsoup4->bs4->requests-html) (2.3.1)\n",
      "Requirement already satisfied: importlib-resources>=5.0 in d:\\anaconda\\lib\\site-packages (from fake-useragent->requests-html) (6.0.1)\n",
      "Requirement already satisfied: lxml>=2.1 in d:\\anaconda\\lib\\site-packages (from pyquery->requests-html) (4.8.0)\n",
      "Requirement already satisfied: cssselect>=1.2.0 in d:\\anaconda\\lib\\site-packages (from pyquery->requests-html) (1.2.0)\n",
      "Requirement already satisfied: idna<4,>=2.5 in d:\\anaconda\\lib\\site-packages (from requests->requests-html) (3.3)\n",
      "Requirement already satisfied: charset-normalizer~=2.0.0 in d:\\anaconda\\lib\\site-packages (from requests->requests-html) (2.0.4)\n",
      "Requirement already satisfied: six>=1.4.1 in d:\\anaconda\\lib\\site-packages (from w3lib->requests-html) (1.16.0)\n"
     ]
    }
   ],
   "source": [
    "!pip install requests-html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "14811add",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " * Serving Flask app \"__main__\" (lazy loading)\n",
      " * Environment: production\n",
      "\u001b[31m   WARNING: This is a development server. Do not use it in a production deployment.\u001b[0m\n",
      "\u001b[2m   Use a production WSGI server instead.\u001b[0m\n",
      " * Debug mode: off\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n",
      "127.0.0.1 - - [15/Nov/2023 20:51:01] \"GET / HTTP/1.1\" 200 -\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "上海\n",
      "数据分析\n",
      "实习生\n",
      "登录cookie XSRF-TOKEN=zIARnRM0QQaLudJk_4OBXw; __gc_id=e936feed5bd343e5a73b304fa0d4ad5f; _ga=GA1.1.504776059.1697021947; __uuid=1697021948310.51; __tlog=1697021948354.48%7C00000000%7C00000000%7C00000000%7C00000000; Hm_lvt_a2647413544f5a04f00da7eee0d5e200=1697021951; acw_tc=2760828416970219810274366e53a098388abcfc886c89f5cbf2332344893f; Hm_lpvt_a2647413544f5a04f00da7eee0d5e200=1697021975; __session_seq=4; __uv_seq=4; __tlg_event_seq=24; _ga_54YTJKWN86=GS1.1.1697021946.1.1.1697023027.0.0.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[2023-11-15 20:51:08,277] ERROR in app: Exception on /user_choose [POST]\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connection.py\", line 174, in _new_conn\n",
      "    conn = connection.create_connection(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\util\\connection.py\", line 95, in create_connection\n",
      "    raise err\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\util\\connection.py\", line 85, in create_connection\n",
      "    sock.connect(sa)\n",
      "ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝，无法连接。\n",
      "\n",
      "During handling of the above exception, another exception occurred:\n",
      "\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connectionpool.py\", line 700, in urlopen\n",
      "    self._prepare_proxy(conn)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connectionpool.py\", line 994, in _prepare_proxy\n",
      "    conn.connect()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connection.py\", line 358, in connect\n",
      "    self.sock = conn = self._new_conn()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connection.py\", line 186, in _new_conn\n",
      "    raise NewConnectionError(\n",
      "urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x000002DCA68B64F0>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝，无法连接。\n",
      "\n",
      "During handling of the above exception, another exception occurred:\n",
      "\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\adapters.py\", line 440, in send\n",
      "    resp = conn.urlopen(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connectionpool.py\", line 785, in urlopen\n",
      "    retries = retries.increment(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\util\\retry.py\", line 592, in increment\n",
      "    raise MaxRetryError(_pool, url, error or ResponseError(cause))\n",
      "urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api-c.liepin.com', port=443): Max retries exceeded with url: /api/com.liepin.searchfront4c.pc-search-job (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002DCA68B64F0>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝，无法连接。')))\n",
      "\n",
      "During handling of the above exception, another exception occurred:\n",
      "\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 2447, in wsgi_app\n",
      "    response = self.full_dispatch_request()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1952, in full_dispatch_request\n",
      "    rv = self.handle_user_exception(e)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1821, in handle_user_exception\n",
      "    reraise(exc_type, exc_value, tb)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\_compat.py\", line 39, in reraise\n",
      "    raise value\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1950, in full_dispatch_request\n",
      "    rv = self.dispatch_request()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1936, in dispatch_request\n",
      "    return self.view_functions[rule.endpoint](**req.view_args)\n",
      "  File \"C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_17288\\1235339482.py\", line 26, in user_choose\n",
      "    crawl_results = crawl_liepin.crawl(城市 = user_city ,关键词=user_category,工作经验=user_workexp)\n",
      "  File \"D:\\2023-2024-01\\Web\\web\\week11\\crawl_liepin.py\", line 29, in crawl\n",
      "    r = session.post(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\sessions.py\", line 577, in post\n",
      "    return self.request('POST', url, data=data, json=json, **kwargs)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\sessions.py\", line 529, in request\n",
      "    resp = self.send(prep, **send_kwargs)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\sessions.py\", line 645, in send\n",
      "    r = adapter.send(request, **kwargs)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\adapters.py\", line 513, in send\n",
      "    raise ProxyError(e, request=request)\n",
      "requests.exceptions.ProxyError: HTTPSConnectionPool(host='api-c.liepin.com', port=443): Max retries exceeded with url: /api/com.liepin.searchfront4c.pc-search-job (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002DCA68B64F0>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝，无法连接。')))\n",
      "127.0.0.1 - - [15/Nov/2023 20:51:08] \"POST /user_choose HTTP/1.1\" 500 -\n",
      "127.0.0.1 - - [15/Nov/2023 20:54:19] \"GET / HTTP/1.1\" 200 -\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "上海\n",
      "数据分析\n",
      "实习生\n",
      "登录cookie XSRF-TOKEN=zIARnRM0QQaLudJk_4OBXw; __gc_id=e936feed5bd343e5a73b304fa0d4ad5f; _ga=GA1.1.504776059.1697021947; __uuid=1697021948310.51; __tlog=1697021948354.48%7C00000000%7C00000000%7C00000000%7C00000000; Hm_lvt_a2647413544f5a04f00da7eee0d5e200=1697021951; acw_tc=2760828416970219810274366e53a098388abcfc886c89f5cbf2332344893f; Hm_lpvt_a2647413544f5a04f00da7eee0d5e200=1697021975; __session_seq=4; __uv_seq=4; __tlg_event_seq=24; _ga_54YTJKWN86=GS1.1.1697021946.1.1.1697023027.0.0.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[2023-11-15 20:54:38,129] ERROR in app: Exception on /user_choose [POST]\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connection.py\", line 174, in _new_conn\n",
      "    conn = connection.create_connection(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\util\\connection.py\", line 95, in create_connection\n",
      "    raise err\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\util\\connection.py\", line 85, in create_connection\n",
      "    sock.connect(sa)\n",
      "ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝，无法连接。\n",
      "\n",
      "During handling of the above exception, another exception occurred:\n",
      "\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connectionpool.py\", line 700, in urlopen\n",
      "    self._prepare_proxy(conn)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connectionpool.py\", line 994, in _prepare_proxy\n",
      "    conn.connect()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connection.py\", line 358, in connect\n",
      "    self.sock = conn = self._new_conn()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connection.py\", line 186, in _new_conn\n",
      "    raise NewConnectionError(\n",
      "urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x000002DCA68E2D60>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝，无法连接。\n",
      "\n",
      "During handling of the above exception, another exception occurred:\n",
      "\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\adapters.py\", line 440, in send\n",
      "    resp = conn.urlopen(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\connectionpool.py\", line 785, in urlopen\n",
      "    retries = retries.increment(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\urllib3\\util\\retry.py\", line 592, in increment\n",
      "    raise MaxRetryError(_pool, url, error or ResponseError(cause))\n",
      "urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api-c.liepin.com', port=443): Max retries exceeded with url: /api/com.liepin.searchfront4c.pc-search-job (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002DCA68E2D60>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝，无法连接。')))\n",
      "\n",
      "During handling of the above exception, another exception occurred:\n",
      "\n",
      "Traceback (most recent call last):\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 2447, in wsgi_app\n",
      "    response = self.full_dispatch_request()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1952, in full_dispatch_request\n",
      "    rv = self.handle_user_exception(e)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1821, in handle_user_exception\n",
      "    reraise(exc_type, exc_value, tb)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\_compat.py\", line 39, in reraise\n",
      "    raise value\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1950, in full_dispatch_request\n",
      "    rv = self.dispatch_request()\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\flask\\app.py\", line 1936, in dispatch_request\n",
      "    return self.view_functions[rule.endpoint](**req.view_args)\n",
      "  File \"C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_17288\\1235339482.py\", line 26, in user_choose\n",
      "    crawl_results = crawl_liepin.crawl(城市 = user_city ,关键词=user_category,工作经验=user_workexp)\n",
      "  File \"D:\\2023-2024-01\\Web\\web\\week11\\crawl_liepin.py\", line 29, in crawl\n",
      "    r = session.post(\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\sessions.py\", line 577, in post\n",
      "    return self.request('POST', url, data=data, json=json, **kwargs)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\sessions.py\", line 529, in request\n",
      "    resp = self.send(prep, **send_kwargs)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\sessions.py\", line 645, in send\n",
      "    r = adapter.send(request, **kwargs)\n",
      "  File \"D:\\Anaconda\\lib\\site-packages\\requests\\adapters.py\", line 513, in send\n",
      "    raise ProxyError(e, request=request)\n",
      "requests.exceptions.ProxyError: HTTPSConnectionPool(host='api-c.liepin.com', port=443): Max retries exceeded with url: /api/com.liepin.searchfront4c.pc-search-job (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002DCA68E2D60>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝，无法连接。')))\n",
      "127.0.0.1 - - [15/Nov/2023 20:54:38] \"POST /user_choose HTTP/1.1\" 500 -\n"
     ]
    }
   ],
   "source": [
    "from flask import Flask\n",
    "from flask import render_template,request\n",
    "import crawl_liepin\n",
    "from jinja2 import Markup, Environment, FileSystemLoader\n",
    "from pyecharts.globals import CurrentConfig\n",
    "from pyecharts import options as opts\n",
    "from pyecharts.charts import Map\n",
    "\n",
    "# 关于 CurrentConfig，可参考 [基本使用-全局变量]\n",
    "CurrentConfig.GLOBAL_ENV = Environment(loader=FileSystemLoader(\"./templates\"))\n",
    "\n",
    "app = Flask(__name__)\n",
    "\n",
    "@app.route('/')\n",
    "def index():\n",
    "    return render_template(\"index.html\")\n",
    "\n",
    "@app.route('/user_choose',methods = ['POST', 'GET'])\n",
    "def user_choose():\n",
    "    print(request.form['city'])\n",
    "    print(request.form['category'])\n",
    "    print(request.form['workexp'])\n",
    "    user_city = request.form['city']\n",
    "    user_category = request.form['category']\n",
    "    user_workexp = request.form['workexp']\n",
    "    crawl_results = crawl_liepin.crawl(城市 = user_city ,关键词=user_category,工作经验=user_workexp)\n",
    "    crawl_results_df = crawl_results[\n",
    "        [\n",
    "            'recruiter.recruiterTitle',\n",
    "            'comp.compScale',\n",
    "            'comp.compStage',\n",
    "            'comp.compIndustry',\n",
    "            'comp.compName',\n",
    "            'job.labels',\n",
    "            'job.dq',\n",
    "            'job.campusJobKind',\n",
    "            'job.title',\n",
    "            'job.salary'\n",
    "        ]\n",
    "    ]\n",
    "    crawl_results_df.to_excel('%s_%s_%s.xlsx'%(user_city,user_category,user_workexp))\n",
    "    crawl_results_html = crawl_results_df.to_html()\n",
    "    # 文件存储\n",
    "    text_file = open(\"templates/results.html\", \"w\",encoding=\"utf-8\")\n",
    "    text_file.write(crawl_results_html)\n",
    "    text_file.close()\n",
    "    return render_template(\"results.html\")\n",
    "\n",
    "def map_base() -> Map:\n",
    "    df = pd.read_excel('北京_产品运营_应届生.xlsx')\n",
    "    series_dq = df['job.dq'].value_counts() # 整理地区的区域数据\n",
    "    dq_name= [i for i in series_dq.index if '-' in i] # 梳理区域名称\n",
    "    series_dq[dq_name].values #　梳理各区域的数据\n",
    "    c = (\n",
    "        Map()\n",
    "        .add(\"产品经理地区分布\", [list(z) for z in zip([i.split('-')[1] for i in dq_name],series_dq[dq_name].values.tolist())], \"北京\")\n",
    "        .set_global_opts(\n",
    "            title_opts=opts.TitleOpts(title=\"Map-北京_产品运营_应届生\"), visualmap_opts=opts.VisualMapOpts()\n",
    "        )\n",
    "\n",
    "    )\n",
    "    \n",
    "    return c\n",
    "\n",
    "\n",
    "@app.route(\"/map\")\n",
    "def map_test():\n",
    "    c = map_base()\n",
    "    return Markup(c.render_embed())                        \n",
    "\n",
    "if __name__ == '__main__':\n",
    "    app.run()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "97b7bda9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "35e13487",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6a67babf",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "83997487",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8107208a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a9859cad",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c8df390d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "258487a9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81c9ce47",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "549a455e",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ebe2e8a2",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5aa0a6e2",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b5a8e9a3",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "341.333px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
